home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Sample Code / Snippets / QuickDraw / Icon Display / bullMenus.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-07  |  2.7 KB  |  150 lines  |  [TEXT/KAHL]

  1. #include "QDOffscreen.h"
  2. /*****
  3.  * bullMenus.c
  4.  *
  5.  *    Routines for Bullseye demo menus.
  6.  *
  7.  *****/
  8.  
  9. extern    WindowPtr bullseyeWindow;
  10. extern    int    width;
  11. extern  GWorldPtr    GgwPtr;
  12.  
  13. static void enable(MenuHandle menu, short item, Boolean ok);
  14.  
  15. MenuHandle    appleMenu, fileMenu, editMenu;
  16.  
  17. enum    {
  18.     appleID = 1,
  19.     fileID,
  20.     editID,
  21.     widthID
  22.     };
  23.  
  24. enum    {
  25.     openItem = 1,
  26.     closeItem,
  27.     quitItem = 4
  28.     };
  29.  
  30. /****
  31.  * SetUpMenus()
  32.  *
  33.  *    Set up the menus. Normally, we’d use a resource file, but
  34.  *    for this example we’ll supply “hardwired” strings.
  35.  *
  36.  ****/
  37.  
  38. SetUpMenus()
  39.  
  40. {
  41.     InsertMenu(appleMenu = NewMenu(appleID, "\p\024"), 0);
  42.     InsertMenu(fileMenu = NewMenu(fileID, "\pFile"), 0);
  43.     InsertMenu(editMenu = NewMenu(editID, "\pEdit"), 0);
  44.     DrawMenuBar();
  45.     AddResMenu(appleMenu, 'DRVR');
  46.     AppendMenu(fileMenu, "\pOpen/O;Close/W;(-;Quit/Q");
  47.     AppendMenu(editMenu, "\pUndo/Z;(-;Cut/X;Copy/C;Paste/V;Clear");
  48. }
  49. /* end SetUpMenus */
  50.  
  51.  
  52. /****
  53.  *  AdjustMenus()
  54.  *
  55.  *    Enable or disable the items in the Edit menu if a DA window
  56.  *    comes up or goes away. Our application doesn't do anything with
  57.  *    the Edit menu.
  58.  *
  59.  ****/
  60.  
  61. AdjustMenus()
  62. {
  63.     register WindowPeek wp = (WindowPeek) FrontWindow();
  64.     short kind = wp ? wp->windowKind : 0;
  65.     Boolean DA = kind < 0;
  66.     
  67.     enable(editMenu, 1, DA);
  68.     enable(editMenu, 3, DA);
  69.     enable(editMenu, 4, DA);
  70.     enable(editMenu, 5, DA);
  71.     enable(editMenu, 6, DA);
  72.     
  73.     enable(fileMenu, openItem, !((WindowPeek) bullseyeWindow)->visible);
  74.     enable(fileMenu, closeItem, DA || ((WindowPeek) bullseyeWindow)->visible);
  75. }
  76.  
  77.  
  78. static void enable(MenuHandle menu, short item, Boolean ok)
  79. {
  80.     if (ok)
  81.         EnableItem(menu, item);
  82.     else
  83.         DisableItem(menu, item);
  84. }
  85.  
  86.  
  87. /*****
  88.  * HandleMenu(mSelect)
  89.  *
  90.  *    Handle the menu selection. mSelect is what MenuSelect() and
  91.  *    MenuKey() return: the high word is the menu ID, the low word
  92.  *    is the menu item
  93.  *
  94.  *****/
  95.  
  96. HandleMenu (mSelect)
  97.  
  98.     long    mSelect;
  99.  
  100. {
  101.     int            menuID = HiWord(mSelect);
  102.     int            menuItem = LoWord(mSelect);
  103.     Str255        name;
  104.     GrafPtr        savePort;
  105.     WindowPeek    frontWindow;
  106.     
  107.     switch (menuID)
  108.       {
  109.       case    appleID:
  110.         GetPort(&savePort);
  111.         GetItem(appleMenu, menuItem, name);
  112.         OpenDeskAcc(name);
  113.         SetPort(savePort);
  114.         break;
  115.     
  116.       case    fileID:
  117.         switch (menuItem)
  118.           {
  119.           case    openItem:
  120.             ShowWindow(bullseyeWindow);
  121.             SelectWindow(bullseyeWindow);
  122.             break;
  123.                                 
  124.           case    closeItem:
  125.             if ((frontWindow = (WindowPeek) FrontWindow()) == 0L)
  126.               break;
  127.               
  128.             if (frontWindow->windowKind < 0)
  129.               CloseDeskAcc(frontWindow->windowKind);
  130.             else if (frontWindow = (WindowPeek) bullseyeWindow)
  131.               HideWindow(bullseyeWindow);
  132.                         break;
  133.                         
  134.           case    quitItem:
  135.               DisposeGWorld(GgwPtr);
  136.             ExitToShell();
  137.             break;
  138.           }
  139.         break;
  140.                   
  141.       case    editID:
  142.         if (!SystemEdit(menuItem-1))
  143.           SysBeep(5);
  144.         break;
  145.         
  146.       }
  147. }
  148. /* end HandleMenu */
  149.  
  150.